#pragma once

#include <linux/compiler.h>
#include <linux/build_bug.h>

#include <linux/printk.h>
#include <linux/panic.h>

#ifdef CONFIG_BUG
#define __WARN()                                       \
    do                                                 \
    {                                                  \
        printk("WARN: %s():%d\n", __func__, __LINE__); \
    } while (0)
#else
#define __WARN() \
    do           \
    {            \
    } while (0)
#endif

#define BUG()                                                       \
    do                                                              \
    {                                                               \
        printk("BUG: %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
    } while (0)

#define BUG_ON(condition)        \
    do                           \
    {                            \
        if (unlikely(condition)) \
            BUG();               \
    } while (0)

#define WARN_ON_ONCE(condition) ({     \
    int __ret_warn_on = !!(condition); \
    __ret_warn_on;                     \
})

#define WARN_ON(condition) ({          \
    int __ret_warn_on = !!(condition); \
    if (unlikely(__ret_warn_on))       \
        __WARN();                      \
    __ret_warn_on;                     \
})

#define WARN(condition, format...) ({  \
    int __ret_warn_on = !!(condition); \
    __ret_warn_on;                     \
})

#define WARN_ONCE(condition, format...) WARN(condition, format)
